package com.hundsun.fmbp.deploy.utils;

import java.security.Key;

import javax.crypto.Cipher;

/**
 * 类名称：DesDecryptor 类描述：DES 解密 创建人：fangchi 创建时间：Nov 10, 2011 8:31:04 PM
 * 
 * @version 0.0.1 修改人： 修改时间： 修改备注：
 */
public class DesDecryptor extends DesKeyGenerator {

    /**
     * 功能描述：解密字节数组
     * 
     * @param arrB
     *            要解密的数组
     * @param strKey
     *            密钥
     * @return 解密后的字节数组
     * @throws Exception
     */
    private static byte[] decrypt(byte[] arrB, String strKey) throws Exception {
        Cipher decryptCipher = Cipher.getInstance("DES");
        Key key = getKey(strKey.getBytes());
        decryptCipher.init(Cipher.DECRYPT_MODE, key);
        return decryptCipher.doFinal(arrB);
    }

    /**
     * 加密字符串
     * 
     * @param str
     *            原字符串
     * @param key
     *            加密密钥
     * @return 解密后的字符串
     * @throws Exception
     * @since 0.0.1
     */
    public static String getDecString(String str, String key) throws Exception {
        return new String(decrypt(hexStrToByteArr(str), key));
    }

    private static byte[] hexStrToByteArr(String strIn) throws Exception {
        byte[] arrB = strIn.getBytes();
        int iLen = arrB.length;

        // 两个字符表示一个字节，所以字节数组长度是字符串长度除以2
        byte[] arrOut = new byte[iLen / 2];
        for (int i = 0; i < iLen; i = i + 2) {
            String strTmp = new String(arrB, i, 2);
            arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);
        }
        return arrOut;
    }

}
